package my.design.mode.singleton;

/**
 * 初级错误写法
 * @author xsw
 * @date 2018年11月1日
 */
public class SimpleExampleError {
	//懒汉模式，当需要使用这个对象时，才进行对象初始化
	private static SimpleExampleError intance;
	
	private SimpleExampleError(){}
	
	/**
	 * 单线程中这样写没问题，但在多线程中，就会出现错误。<br/>
	 * 例子：两个线程：a和b。<br/>
	 * 1. a执行到1，判断为null，进入2，intance 还未创建，被线程b占用cpu <br/>
	 * 2. b执行1判断 intance 也为null，执行2，创建了 intance 对象，并在3中返回 <br/>
	 * 3. a重新获取cpu，继续执行2，创建 intance 对象，并在3中返回 <br/>
	 * 结果：上面连个线程返回了两个不一样的对象。
	 * @return
	 */
	public static SimpleExampleError getInstance(){
		if(intance == null){// 1
			intance = new SimpleExampleError();//2
		}
		return intance;//3
	}
}
